﻿using BLevy.Entidad;
using BLevy.Negocio;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BLevy.UI
{
    public partial class frmCobradores : Form
    {
        private int cobrador_id { get; set; }
        private string operacion { get; set; }

        public frmCobradores()
        {
            InitializeComponent();
        }

        public frmCobradores(int id, string _operacion)
        {
            cobrador_id = id;
            operacion = _operacion;
            InitializeComponent();
        }

        private void IniciarControles()
        {
            txtApellido.Text = string.Empty;
            txtCalle.Text = string.Empty;
            txtCodigo.Text = string.Empty;
            txtComision.Text = string.Empty;
            txtDepartamento.Text = string.Empty;
            txtDocumento.Text = string.Empty;
            txtEmail.Text = string.Empty;
            txtNombres.Text = string.Empty;
            txtNumeracion.Text = string.Empty;
            txtPiso.Text = string.Empty;
            txtTelefonoCelular.Text = string.Empty;
            txtTelefonoParticular.Text = string.Empty;
            ckbActivo.CheckState = CheckState.Checked;
            tabControl1.SelectedTab = tabPage1;
            this.ActiveControl = txtApellido;

            txtCodigo.Enabled = false;
        }

        private void frmCobradores_Load(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(operacion))
            {
                IniciarControles();
                GetLocalidades();
            }
            else
            {
                GetLocalidades();
                txtCodigo.Enabled = false;

                try
                {
                    Cobrador cobrador = BuscarPorId(cobrador_id);

                    txtApellido.Text = cobrador.apellido;
                    txtCalle.Text = cobrador.calle;
                    txtCodigo.Text = String.Format("{0:000}", cobrador.id);
                    txtComision.Text = cobrador.comision.ToString();
                    txtDepartamento.Text = cobrador.departamento;
                    txtDocumento.Text = cobrador.documento;
                    txtEmail.Text = cobrador.email;
                    txtNombres.Text = cobrador.nombres;
                    txtNumeracion.Text = cobrador.numeracion;
                    txtPiso.Text = cobrador.piso;
                    txtTelefonoCelular.Text = cobrador.telefonocelular;
                    txtTelefonoParticular.Text = cobrador.telefonoparticular;

                    cobrador.localidad = Localidades.FindById(cobrador.localidad_id);
                    cmbLocalidad.Text = cobrador.localidad.localidad;

                    cobrador.zona = Negocio.Zonas.FindById(cobrador.zona_id);
                    cmbZona.Text = cobrador.zona.zona;

                    ckbActivo.Checked = Convert.ToBoolean(cobrador.activo);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error : " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

            }

        }

        private Boolean ValidarForm()
        {
            bool resultado = true;
            error.Clear();

            if (string.IsNullOrEmpty(txtApellido.Text))
            {
                resultado = false;
                error.SetError(txtApellido, "Debe completar el campo Apellido.");
                return resultado;
            }

            if (string.IsNullOrEmpty(txtNombres.Text))
            {
                resultado = false;
                error.SetError(txtNombres, "Debe completar el campo Nombres.");
                return resultado;
            }

            if (string.IsNullOrEmpty(txtDocumento.Text))
            {
                resultado = false;
                error.SetError(txtDocumento, "Debe completar el campo Documento.");
                return resultado;
            }

            if (string.IsNullOrEmpty(txtComision.Text))
            {
                resultado = false;
                error.SetError(txtComision, "Debe completar el campo Comisión.");
                return resultado;
            }

            if (string.IsNullOrEmpty(txtCalle.Text))
            {
                resultado = false;
                error.SetError(txtCalle, "Debe completar el campo Calle.");
                tabControl1.SelectedTab = tabPage1;
                return resultado;
            }

            if (string.IsNullOrEmpty(txtNumeracion.Text))
            {
                resultado = false;
                error.SetError(txtNumeracion, "Debe completar el campo Numeración.");
                tabControl1.SelectedTab = tabPage1;
                return resultado;
            }

            if (string.IsNullOrEmpty(txtTelefonoParticular.Text))
            {
                resultado = false;
                error.SetError(txtTelefonoParticular, "Debe completar el campo Teléfono Particular.");
                tabControl1.SelectedTab = tabPage2;
                return resultado;
            }

            if (string.IsNullOrEmpty(txtEmail.Text))
            {
                resultado = false;
                error.SetError(txtEmail, "Debe completar el campo Email.");
                tabControl1.SelectedTab = tabPage2;
                return resultado;
            }

            if (cmbZona.Items.Count == 0)
            {
                resultado = false;
                error.SetError(cmbZona, "Debe seleccionar una Zona.");
                tabControl1.SelectedTab = tabPage1;
                return resultado;
            }

            return resultado;
        }


        private void ModificarCobrador()
        {
            try
            {
                Cobrador cobrador = new Cobrador();
                cobrador.apellido = txtApellido.Text;
                cobrador.activo = Convert.ToInt32(ckbActivo.CheckState);
                cobrador.calle = txtCalle.Text;
                cobrador.comision = Convert.ToDouble(txtComision.Text);
                cobrador.departamento = txtDepartamento.Text;
                cobrador.documento = txtDocumento.Text;
                cobrador.email = txtEmail.Text;
                cobrador.fecharegistro = DateTime.Now;
                cobrador.localidad_id = Convert.ToInt32(cmbLocalidad.SelectedValue);
                cobrador.nombres = txtNombres.Text;
                cobrador.numeracion = txtNumeracion.Text;
                cobrador.piso = txtPiso.Text;
                cobrador.telefonocelular = txtTelefonoCelular.Text;
                cobrador.telefonoparticular = txtTelefonoCelular.Text;
                cobrador.vigencia = dtpVigencia.Value;
                cobrador.zona_id = Convert.ToInt32(cmbZona.SelectedValue);
                cobrador.id = cobrador_id;

                int resultado = Cobradores.Modify(cobrador);
                if (resultado > 0)
                {
                    MessageBox.Show("Los datos se modificaron correctamente.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    this.Close();
                }
                else
                {
                    MessageBox.Show("Ocurrio un error al modificar los datos. Intente Nuevamente.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        private void RegistrarCobrador()
        {
            try
            {
                Cobrador cobrador = new Cobrador();
                cobrador.apellido = txtApellido.Text;
                cobrador.activo = Convert.ToInt32(ckbActivo.CheckState);
                cobrador.calle = txtCalle.Text;
                cobrador.comision = Convert.ToDouble(txtComision.Text);
                cobrador.departamento = txtDepartamento.Text;
                cobrador.documento = txtDocumento.Text;
                cobrador.email = txtEmail.Text;
                cobrador.fecharegistro = DateTime.Now;
                cobrador.localidad_id = Convert.ToInt32(cmbLocalidad.SelectedValue);
                cobrador.nombres = txtNombres.Text;
                cobrador.numeracion = txtNumeracion.Text;
                cobrador.piso = txtPiso.Text;
                cobrador.telefonocelular = txtTelefonoCelular.Text;
                cobrador.telefonoparticular = txtTelefonoCelular.Text;
                cobrador.vigencia = dtpVigencia.Value;
                cobrador.zona_id = Convert.ToInt32(cmbZona.SelectedValue);

                int resultado = Cobradores.Add(cobrador);
                if (resultado > 0)
                {
                    MessageBox.Show("Los datos se registraron correctamente.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    IniciarControles();
                }
                else
                {
                    MessageBox.Show("Ocurrio un error al registrar los datos. Intente Nuevamente.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        private void GetLocalidades()
        {
            try
            {
                cmbLocalidad.ValueMember = "id";
                cmbLocalidad.DisplayMember = "localidad";
                cmbLocalidad.DataSource = Localidades.FindAll();

                if (cmbLocalidad.Items.Count != 0)
                {
                    GetZonasPorLocalidad(Convert.ToInt32(cmbLocalidad.SelectedValue));
                }
                else
                {
                    cmbZona.DataSource = null;
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        private void GetZonasPorLocalidad(int localidad_id)
        {
            try
            {
                cmbZona.ValueMember = "id";
                cmbZona.DisplayMember = "zona";
                cmbZona.DataSource = Negocio.Zonas.FindAllPorLocalidad(localidad_id);
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            if (ValidarForm() == true)
            {
                if (string.IsNullOrEmpty(operacion))
                {
                    RegistrarCobrador();
                }
                else
                {
                    ModificarCobrador();
                }
            }
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void cmbLocalidad_SelectedIndexChanged(object sender, EventArgs e)
        {
            GetZonasPorLocalidad(Convert.ToInt32(cmbLocalidad.SelectedValue));
        }

        private Cobrador BuscarPorId(int cobrador_id)
        {
            Cobrador cobrador = null;
            try
            {
                cobrador = Cobradores.FindById(cobrador_id);
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            return cobrador;
        }

        private void txtDocumento_KeyPress(object sender, KeyPressEventArgs e)
        {
            error.Clear();
            if (!(char.IsNumber(e.KeyChar)) && (e.KeyChar != (char)Keys.Back))
            {
                error.SetError(txtDocumento, "Solo se permiten números en el campo Documento.");
                e.Handled = true;
                return;
            }
        }

        private void txtComision_KeyPress(object sender, KeyPressEventArgs e)
        {
            error.Clear();
            if (!(char.IsNumber(e.KeyChar)) && (e.KeyChar != (char)Keys.Back))
            {
                error.SetError(txtComision, "Solo se permiten números en el campo Comisión.");
                e.Handled = true;
                return;
            }
        }

        private void txtNumeracion_KeyPress(object sender, KeyPressEventArgs e)
        {
            error.Clear();
            if (!(char.IsNumber(e.KeyChar)) && (e.KeyChar != (char)Keys.Back))
            {
                error.SetError(txtNumeracion, "Solo se permiten números en el campo Numeración.");
                e.Handled = true;
                return;
            }
        }

    }
}
